/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Modulos;

import Eventos.CustomEvent;
import interfaces.Controlador;
import interfaces.IVista;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Objects;
import javax.swing.ComboBoxModel;
import utility.Utility;

/**
 *
 * @author Overpower
 */
public class ListadoControlador extends Controlador{
   
    public class SearchData
    {
        public String filter = null;
        public String text = null;
        public String range = null;
        public Integer count = null;
        public Boolean isRange = false;
    }
    
    ListadoVista _vista;
    javax.swing.table.DefaultTableModel _model;
    private Modulo _modulo;
    Integer _selectedRow;
    Boolean _rangoActivo;
    
    
    public void SetModulo(Modulo _modulo)
    {
        this._modulo = _modulo;
    }
    public ListadoControlador(  )
    {
        _selectedRow = -1;
        _rangoActivo = false;
        this._vista = new ListadoVista();
        _vista.setControlador(this);
        _vista.setVisible(true);
        // iniciar vistas de filtros
        
        addListeners();
    }
    
    private java.awt.AWTEvent _listener;
    
    @Override
    protected final void addListeners()
    {
        
        _vista.getBotonMas().addActionListener(this::_btnMasActionPerformed);
        _vista.getBotonMenos().addActionListener(this::_btnMenosActionPerformed);
        
        _vista.getTabla().addMouseListener( new MouseAdapter() {
            @Override 
            public void mouseReleased(MouseEvent evt)
            {
                _tableSelection(evt); 
            }
        });
        
        _vista.getCheckRango().addActionListener(this::_activacionRango);
        _vista.getBotonBuscar().addActionListener(this::_botonBuscarActionPerformed);
        _vista.getComboOrdenar().addActionListener( this::_ordenarLista );
    }
    
    
    
    private void _tableSelection( MouseEvent evt )
    {
        _selectedRow = _vista.getTabla().getSelectedRow();
        _modulo.Seleccion( _selectedRow );
        _vista.getBotonMenos().setEnabled(true);
    }
    
    private void _ordenarLista( java.awt.event.ActionEvent evt )
    {
        if( _vista.getComboOrdenar().getSelectedIndex() != -1 )
        {
            String _selectedItem = _vista.getComboOrdenar().getSelectedItem().toString();
            DispatchCustomEvent( new CustomEvent(this, "OnOrderBy", _selectedItem ) );
        }
    }
    
    private void _activacionRango( java.awt.event.ActionEvent evt)
    {
        _rangoActivo = ((javax.swing.JCheckBox)evt.getSource()).isSelected();
        _vista.getFieldBuscarRango().setEnabled( _rangoActivo );
    }
    
    private void _btnMasActionPerformed(java.awt.event.ActionEvent evt)
    {
        _modulo.Alta();          
    }
    
    private void _btnMenosActionPerformed(java.awt.event.ActionEvent evt)
    {
        _modulo.Baja();
    }
    
    public void SetModel( javax.swing.table.DefaultTableModel _mdl )
    {
        _model = _mdl;
       _vista.getTabla().setModel(_mdl); 
    }
    
    public void SetModelData( String[][] _data )
    {
        int _count = _model.getRowCount();
        for( int i = _count - 1; i >= 0; i--)
        {
            _model.removeRow(i);
            
        }
        
        _count = _data.length;
        for( int i = 0; i < _count; i++ )
        {
            _model.addRow(_data[i]);
        }
    }
    
    
    
    private void _botonBuscarActionPerformed(java.awt.event.ActionEvent evt)
    {
        SearchData _data = new SearchData();
        _data.filter = _vista.getComboBuscar().getSelectedItem().toString();
        _data.text = _vista.getFieldBuscar().getText();
        _data.count = Integer.parseInt( _vista.getComboRegistroPagina().getSelectedItem().toString() );
        _data.isRange = _vista.getCheckRango().isSelected();
        if( _data.isRange )
            _data.range = _vista.getFieldBuscarRango().getText();
        
        DispatchCustomEvent( new CustomEvent(this, "OnSearch", _data) );
    }
    
    public void BotonesHabilitados( boolean _f )
    {
        _vista.getBotonMenos().setEnabled( -1 != _selectedRow && _f );
        _vista.getBotonMas().setEnabled(_f);
    }
    
    public void Modificar( String[] _row )
    {
        if( -1 == _selectedRow )return;
        javax.swing.table.TableModel _tbl = _vista.getTabla().getModel();
        
        for( int i = 0; i < _row.length; i++ )
            _tbl.setValueAt(_row[i], _selectedRow, i);   
    }
    
    public void Agregar(String[] _row)
    {
        _model.addRow(_row);
    }

    public void Eliminar( Integer _idx )
    {
        if( Objects.equals(_selectedRow, _idx) ) _selectedRow = -1;
        _model.removeRow(_idx);
    }
        
    public void Habilitado(Boolean _f) {
        _vista.getTabla().setEnabled(_f);
        Color _c = _vista.getTabla().getBackground();
        _vista.getTabla().setBackground( Color.ORANGE );
    }

    public void SetListaBuscar( String[] _lista )
    {
        _vista.getComboBuscar().setModel(Utility.newListComboModel(_lista));
    }
       
    public void SetListaOrdenar(String[] _lista)
    {
        _vista.getComboOrdenar().setModel(Utility.newListComboModel(_lista)); 
    }
    
    
    @Override
    public IVista getVista() {
        return _vista;
    }
    
}
